home *** CD-ROM | disk | FTP | other *** search
- ;=========================================================
- ; The snowfield simulator.
- ;=========================================================
- ; Hope you like. if you use this code in one of you
- ; demos or something then please credit me, failing that
- ; just send me a copy of you program to peruse.
- ;
- ; If the instructions in the code look in a really wierd
- ; order it is becase they have been aranged to take
- ; advantage of the 486+ Pipeline. If you think my code
- ; is a bit slack then tell me why.
- ;
- ; Code By Jar Jam of TIA
- ;=========================================================
- ; _____ _ ___
- ; |_ _| | | / _ \
- ; | | | | | |_| |
- ; | | | | | _ |
- ; |_|HE |_|NFO |_| |_|SYMILATORS
- ;
- ; If you can code, draw, write decent music or can do
- ; anything else that may be of use to us then apply within
- ;
- ; Temporary EMail: JARJAM@AXS.COM.AU
- ;
- ;=========================================================
-
- .386
-
- ;---------------------------------------------------------
- sstack segment stack use16
- STACKDATA dw 100 dup (0)
- sstack ends
-
- ;---------------------------------------------------------
- ddata segment use16 public
- include pal.dat
- max_flake = 40
- THE_MESSAGE DB 'The snowfield simulator. Not just a sideways starfield :) '
- DB 13,10,'Code: Jacob "JAR JAM" Rhoden, 14/6/97.',13,10,10,10
- DB 10,10,10,10,10,10,10,10,10,10,10,10,10,10
- DB ' _____ _ ___',13,10
- DB ' |_ _| | | / _ \',13,10
- DB ' | | | | | |_| |',13,10
- DB ' | | | | | _ |',13,10
- db ' |_|HE |_|NFO |_| |_|SYMILATORS',13,10
- db '$'
- layer1_xpos dw 010,020,070,040,260,060,070,280,090,100
- dw 110,120,140,160,170,180,190,200,220,310
- dw 010,003,140,096,317,204,109,156,191,057
- dw 008,123,177,162,033,233,298,250,225,311
- layer1_ypos db 010,0, 004,1, 000,2, 024,3, 050,1
- db 050,2, 140,2, 130,3, 146,1, 020,0
- db 070,3, 170,2, 040,1, 158,1, 164,3
- db 002,2, 000,2, 112,3, 004,1, 028,0
- db 010,3, 124,2, 054,1, 062,1, 152,3
- db 050,2, 174,2, 162,3, 038,1, 132,0
- db 080,3, 172,2, 128,1, 076,1, 138,3
- db 088,1, 182,0, 146,3, 022,2, 166,1
- layer2_xpos dw 010,020,030,040,050,060,070,080,090,100
- dw 110,120,130,140,150,160,170,180,190,200
- dw 210,220,230,240,250,260,270,280,290,300
- dw 310,003,056,075,125,145,196,154,205,304
- layer2_ypos db 010,1, 004,0, 000,2, 024,0, 050,3
- db 070,3, 180,2, 040,0, 170,1, 160,1
- db 002,0, 000,3, 112,1, 004,3, 028,2
- db 010,1, 124,0, 054,2, 062,0, 164,3
- db 050,2, 140,1, 130,3, 150,1, 020,0
- db 050,2, 184,1, 160,3, 038,1, 132,0
- db 080,3, 164,2, 128,0, 076,2, 142,1
- db 088,0, 180,3, 142,1, 022,3, 166,2
- layer3_xpos dw 010,020,070,040,260,060,070,280,090,100
- dw 110,120,140,160,170,180,190,200,220,310
- dw 010,003,140,096,317,204,109,156,191,057
- dw 008,123,177,162,033,233,298,256,225,311
- layer3_ypos db 012,1, 004,0, 000,2, 024,0, 052,3
- db 072,3, 168,2, 040,0, 168,2, 152,1
- db 004,0, 000,3, 112,1, 004,3, 028,2
- db 012,1, 124,0, 056,2, 060,0, 160,3
- db 048,2, 140,1, 128,3, 148,1, 020,0
- db 052,2, 184,1, 164,3, 036,1, 132,0
- db 080,3, 172,2, 128,0, 076,2, 140,1
- db 088,0, 184,3, 140,1, 024,3, 164,2
- label looky word
- include look.dat
- pallete db 0,0,10
- parra db 00,03,63,00,07,63,00,15,63,00,31,63
- db 00,31,63,00,15,63,00,07,63,00,03,63
- ddata ends
-
- ccode segment use16
- assume cs:ccode, ds:ddata, ss:sstack
-
- WAIT_RETRACE PROC NEAR
- PUSH DX
- MOV DX,3DAH
- WR_START:
- in al,dx
- test al,8
- jz WR_START ;wait until Verticle Retrace starts
- WR_END:
- in al,dx
- test al,8
- jnz WR_END ;wait until Verticle Retrace Ends
- POP DX
- RET
- WAIT_RETRACE ENDP
-
- show_state3 proc near
- mov si,0
- show_all3:
- mov di,[layer3_xpos+si]
- mov bl,[layer3_ypos+si]
- mov dl,[layer3_ypos+si+1]
- inc dl
- cmp dl,4
- jne _reanimate3
- xor dl,dl
- _reanimate3:
- add bl,4
- cmp bl,188
- jne no_refall3
- xor bl,bl
- no_refall3:
- mov [layer3_ypos+si+1],dl
- mov [layer3_ypos+si],bl
-
- xor bh,bh
- shl bx,1
- add di,[looky+bx]
- mov ax,1f1fh
- cmp dl,1
- je do_13
- cmp dl,2
- je do_23
- cmp dl,3
- je do_33
- do_03:
- mov es:[(320*4)+di+0],ax ;1- 110
- mov es:[(320*5)+di+1],ax ;2- 011
- mov ax,0ffffh
- mov es:[(320*1)+di+0],al ;0- 000
- mov es:[(320*1)+di+1],ax ;1- 111
- jmp short shown_flake3
- do_13:
- mov es:[(320*5)+di+0],al ;1- 000
- mov es:[(320*5)+di+1],ax ;2- 111
- mov ax,0ffffh
- mov es:[(320*0)+di+0],ax ;0- 110
- mov es:[(320*1)+di+1],ax ;1- 011
- jmp short shown_flake3
- do_23:
- mov es:[(320*4)+di+1],ax ;1- 011
- mov es:[(320*5)+di+0],ax ;2- 110
- mov ax,0ffffh
- mov es:[(320*1)+di+2],al ;0- 000
- mov es:[(320*1)+di+0],ax ;1- 111
- jmp short shown_flake3
- do_33:
- mov es:[(320*5)+di+0],al ;1- 000
- mov es:[(320*5)+di+1],ax ;2- 111
- mov ax,0ffffh
- mov es:[(320*0)+di+1],ax ;0- 011
- mov es:[(320*1)+di+0],ax ;1- 110
- shown_flake3:
- add si,2
- cmp si, max_flake*2
- jne show_all3
- ret
- show_state3 endp
-
- show_state proc near
- mov si,0
- show_all:
- mov di,[layer1_xpos+si]
- mov bl,[layer1_ypos+si]
- mov dl,[layer1_ypos+si+1]
- inc dl
- cmp dl,4
- jne _reanimate
- xor dl,dl
- _reanimate:
- add bl,2
- cmp bl,188
- jne no_refall
- xor bl,bl
- no_refall:
- mov [layer1_ypos+si+1],dl
- mov [layer1_ypos+si],bl
-
- xor bh,bh
- shl bx,1
- add di,[looky+bx]
- mov ax,1a1ah
- cmp dl,1
- je do_1
- cmp dl,2
- je do_2
- cmp dl,3
- je do_3
- do_0:
- mov es:[(320*2)+di+0],ax ;1- 110
- mov es:[(320*3)+di+1],ax ;2- 011
- mov ax,0ffffh
- mov es:[(320*1)+di+0],al ;0- 000
- mov es:[(320*1)+di+1],ax ;1- 111
- jmp short shown_flake
- do_1:
- mov es:[(320*3)+di+0],al ;1- 000
- mov es:[(320*3)+di+1],ax ;2- 111
- mov ax,0ffffh
- mov es:[(320*0)+di+0],ax ;0- 110
- mov es:[(320*1)+di+1],ax ;1- 011
- jmp short shown_flake
- do_2:
- mov es:[(320*2)+di+1],ax ;1- 011
- mov es:[(320*3)+di+0],ax ;2- 110
- mov ax,0ffffh
- mov es:[(320*1)+di+2],al ;0- 000
- mov es:[(320*1)+di+0],ax ;1- 111
- jmp short shown_flake
- do_3:
- mov es:[(320*3)+di+0],al ;1- 000
- mov es:[(320*3)+di+1],ax ;2- 111
- mov ax,0ffffh
- mov es:[(320*0)+di+1],ax ;0- 011
- mov es:[(320*1)+di+0],ax ;1- 110
- shown_flake:
- add si,2
- cmp si, max_flake*2
- jne show_all
- ret
- show_state endp
-
- show_state2 proc near
- mov si,0
- show_all2:
- mov di,[layer2_xpos+si]
- mov bl,[layer2_ypos+si]
- mov dl,[layer2_ypos+si+1]
- inc dl
- cmp dl,4
- jne _reanimate2
- xor dl,dl
- _reanimate2:
- inc bl
- cmp bl,188
- jne no_refall2
- xor bl,bl
- no_refall2:
- mov [layer2_ypos+si+1],dl
- mov [layer2_ypos+si],bl
-
- xor bh,bh
- shl bx,1
- add di,[looky+bx]
- mov ax,1515h
- cmp dl,1
- je do_12
- cmp dl,2
- je do_22
- cmp dl,3
- je do_32
- do_02:
- mov es:[(320*1)+di+0],ax ;1- 110
- mov es:[(320*2)+di+1],ax ;2- 011
- mov ax,0ffffh
- ; mov es:[(320*1)+di+0],al ;0- 000
- mov es:[(320*1)+di+2],al ;1- 111
- jmp short shown_flake2
- do_12:
- mov es:[(320*2)+di+0],al ;1- 000
- mov es:[(320*2)+di+1],ax ;2- 111
- mov ax,0ffffh
- mov es:[(320*0)+di+0],ax ;0- 110
- mov es:[(320*1)+di+1],ax ;1- 011
- jmp short shown_flake2
- do_22:
- mov es:[(320*1)+di+1],ax ;1- 011
- mov es:[(320*2)+di+0],ax ;2- 110
- mov ax,0ffffh
- ; mov es:[(320*1)+di+0],al ;0- 000
- mov es:[(320*1)+di+0],al ;1- 111
- jmp short shown_flake2
- do_32:
- mov es:[(320*2)+di+0],al ;1- 000
- mov es:[(320*2)+di+1],ax ;2- 111
- mov ax,0ffffh
- mov es:[(320*0)+di+1],ax ;0- 011
- mov es:[(320*1)+di+0],ax ;1- 110
- shown_flake2:
- add si,2
- cmp si, max_flake*2
- jne show_all2
- ret
- show_state2 endp
-
- start proc near
- mov ax,ddata
- mov ds,ax
- mov es,ax
- mov ax,013h
- int 010h
-
- mov si,0a000h
- MOV DX,OFFSET PALLETE ; ES:DX pooint to palette data
- MOV AX,01012h ; WRITE palette
- MOV BX,0ffh ; do colour 255
- MOV CX,1 ; and write 1 colour
- INT 10h
- mov es,si
-
- xor di,di
- mov cx,160*190
- mov ax,0ffffh
- rep stosw
- mov di,320*190
- mov cx,160*12
- mov ax,0202h
- rep stosw
- MAIN_loop:
- CALL WAIT_RETRACE
- call show_state2
- CALL WAIT_RETRACE
- call show_state
- CALL WAIT_RETRACE
- call show_state3
- mov ah,1
- int 016h
- jnz _exit
- jmp main_loop
- _EXIT:
- XOR AX,AX
- INT 016h
- MOV AX,03
- INT 010h
- MOV DX,OFFSET THE_MESSAGE
- MOV AH,9
- INT 021h
- MOV AX,04C00h
- INT 021h
- START ENDP
-
- ccode ends
- end start
-